// import { createApp } from 'vue'
// import { createPinia } from 'pinia'
// import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
// import './style.css'
// import App from './App.vue'
// import router from './router'
// import * as ElementPlusIconsVue from '@element-plus/icons-vue'
// // 导入Element Plus和ElMessage
// import ElementPlus from 'element-plus'
// import 'element-plus/dist/index.css'
// import { ElMessage } from 'element-plus'
// import panelHead from './components/panelHead.vue'
// import { useMenuStore } from '@/store/menu'

// const app = createApp(App)
// const pinia = createPinia()
// pinia.use(piniaPluginPersistedstate)

// app.component('panelHead', panelHead)
// // 使用Element Plus
// app.use(ElementPlus)

// // 使用图标
// for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
//   app.component(key, component)
// }

// // 全局注册ElMessage
// app.config.globalProperties.$message = ElMessage

// app.use(pinia)
// // 使用router
// app.use(router)
// // 刷新后的动态路由添加逻辑
// // 必须在app.use(pinia)之后执行，确保Store可用
// const initDynamicRoutes = async () => {
//   const menuStore = useMenuStore()
//   const localData = localStorage.getItem('pz_v3pz')
  
//   if (localData) {
//     try {
//       const parsedData = JSON.parse(localData)
//       // 重新触发dynamicMenu
//       if (parsedData.routerList) {
//         menuStore.dynamicMenu(parsedData.routerList)
//         // 添加动态路由
//         menuStore.routerList.forEach(route => {
//           router.addRoute('main', route)
//         })
//       }
//     } catch (error) {
//       console.error('解析本地存储的路由数据失败:', error)
//       // 可以在这里添加错误处理，例如清除无效的本地存储数据
//       // localStorage.removeItem('pz_v3pz')
//     }
//   }
  
//   // 确保路由已准备好再挂载应用
//   app.mount('#app')
// }

// // 初始化动态路由并挂载应用
// initDynamicRoutes()

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import './style.css'
import App from './App.vue'
import router from './router'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import { ElMessage } from 'element-plus'
import panelHead from './components/panelHead.vue'
import { useMenuStore } from '@/store/menu'

const app = createApp(App)
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)

// 注册全局组件和插件
app.component('panelHead', panelHead)
app.use(ElementPlus)
app.use(pinia)
app.use(router)

// 注册图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

// 全局注册ElMessage
app.config.globalProperties.$message = ElMessage

// 初始化动态路由
const initDynamicRoutes = async () => {
  // 等待路由准备就绪
  await router.isReady()
  
  const menuStore = useMenuStore()
  
  // 检查pinia中是否已有路由数据（由持久化插件恢复）
  if (menuStore.routerList.length > 0) {
    // 重新设置组件并注册路由
    menuStore.dynamicMenu(menuStore.routerList)
    registerRoutes(menuStore.routerList)
  } else {
    // 如果pinia中没有，尝试从localStorage读取
    const localData = localStorage.getItem('pz_v3pz')
    if (localData) {
      try {
        const parsedData = JSON.parse(localData)
        if (parsedData.routerList) {
          menuStore.dynamicMenu(parsedData.routerList)
          registerRoutes(menuStore.routerList)
        }
      } catch (error) {
        console.error('解析本地存储的路由数据失败:', error)
        localStorage.removeItem('pz_v3pz')
      }
    }
  }
  
  // 处理刷新时的路由匹配问题
  const currentPath = router.currentRoute.value.path
  if (currentPath && !router.hasRoute(currentPath)) {
    // 如果当前路径没有匹配的路由，可以重定向到首页或其他页面
    router.push('/')
  }
  
  // 挂载应用
  app.mount('#app')
}

// 注册路由的函数
const registerRoutes = (routes) => {
  // 先清除已注册的动态路由，避免重复
  clearDynamicRoutes()
  
  // 递归注册路由
  const addRoutes = (routesList, parentName = 'main') => {
    routesList.forEach(route => {
      // 为动态路由添加标记
      route.meta = { ...route.meta, isDynamic: true }
      router.addRoute(parentName, route)
      // 如果有子路由，递归注册
      if (route.children && route.children.length) {
        addRoutes(route.children, route.name)
      }
    })
  }
  
  addRoutes(routes)
}

// 清除动态路由的函数
const clearDynamicRoutes = () => {
  router.getRoutes().forEach(route => {
    if (route.meta?.isDynamic) {
      router.removeRoute(route.name)
    }
  })
}

// 启动应用
initDynamicRoutes()
